# -*- coding: UTF-8 -*-
from leetcode_helper import TestcaseHelper, SolutionBase


class BracketsPair:
    def __init__(self):
        self.left = -1
        self.right = -1


class Solution(SolutionBase):
    # 解题的方法，命名和Leetcode的保持一致即可

    # 思路
    # - 遍历字符串，根据遇到的括号来处理，通过栈来保存处理的结果
    def reverseParentheses(self, s: str) -> str:
        stack = []
        ans = '' # 保存碰到最近的（和）之间的字符串
        for item in s:
            if item == '(':
                stack.append(ans)
                ans = ''
            elif item == ')':
                reversed_str = ans[::-1]
                ans = stack[-1] + reversed_str
                stack.pop()
            else:
                ans += item

        return ans


if __name__ == '__main__':
    solution = Solution()

    # 按照leetcode的题目说明，将基本的test case填入
    # 每条case的最后一个元素是正确的结果，即期待的结果
    # 使用元组来保存输入的数据，期待的结果
    testcases = [
        ("n(ev(t)((()lfevf))yd)cb()", "ndyfvefltvecb"),
        ("(ed(et(oc))el)", 'leetcode'),
        ('a(bcdefghijkl(mno)p)q', "apmnolkjihgfedcbq"),
        ('abcd', 'abcd'),
        ("(abcd)", "dcba"),
        ("(u(love)i)", "iloveu"),
        ("db(et(flj))", "dbfljte"),
        ("ta()usw((((a))))", "tauswa")
    ]

    for case_item in testcases:
        # 获取测试用的case和期待的执行结果
        input1 = case_item[0]
        expect = case_item[len(case_item) - 1]

        exec_result = solution.reverseParentheses(input1)

        # 判断执行结果，输出提示信息
        check_result = solution.check_result(expect, exec_result)
        TestcaseHelper.print_case(check_result, case_item, exec_result)
